package com.ujoku.service.test;

import com.labillusion.core.util.StringUtils;
import com.ujoku.base.BaseTest;
import javapns.Push;
import javapns.communication.exceptions.CommunicationException;
import javapns.communication.exceptions.KeystoreException;
import javapns.devices.Device;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Greg.Chen on 2015/5/18.
 */
public class IOSPushService extends BaseTest {
    private final Logger logger = LoggerFactory.getLogger(IOSPushService.class);

    @Test
    public void simpleTest() throws Exception{
        Push.alert("Hello World!", "D:\\testpush.p12", "456852", true, "797661a66cfc155fe0016a4ea0a6155b245cfeef8f2635633430acd228a91406");
    }


    @Test
    public void test() throws CommunicationException, KeystoreException {

        //Push.alert("Hello World!", "D:\\testpush.p12", "456852", false, "142d04e3b359ce58f942fdd6d91029b35bb0d56d7bb56c4bfc5f04ad3d58d939");

       //从客户端获取的deviceToken，在此为了测试简单，写固定的一个测试设备标识。
        String deviceToken = "f4d0f4f88a10fa8e25e1dbb8f125dcfa98f864968c29a9c2b1211b41d6ead3a5";
        //String deviceToken = "505ff217b10e6bb9ac9466d9d52e15523fae42e8e4820fa56ec";
        String alert = "我的push测试";//push的内容
        int badge = 1;//图标小红圈的数值
        String sound = "default";//铃音

        List<String> tokens = new ArrayList<String>();
        tokens.add(deviceToken);
        String certificatePath = "D:\\testpush1.p12";
        String certificatePassword = "456852";//此处注意导出的证书密码不能为空因为空密码会报错
        boolean sendCount = true;

        try {
            PushNotificationPayload payLoad = new PushNotificationPayload();
            //payLoad.addAlert(alert); // 消息内容
            payLoad.addCustomAlertBody("正文：这是一个测试");
            payLoad.addCustomAlertActionLocKey("类型：1");
            payLoad.addBadge(badge); // iphone应用图标上小红圈上的数值
            if (StringUtils.hasText(sound)) {
                payLoad.addSound(sound);//铃音
            }

            PushNotificationManager pushManager = new PushNotificationManager();
            //true：表示的是产品发布推送服务 false：表示的是产品测试推送服务
            pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificatePath, certificatePassword, false));
            List<PushedNotification> notifications = new ArrayList<PushedNotification>();
            // 发送push消息
            if (sendCount)
            {
                Device device = new BasicDevice();
                device.setToken(tokens.get(0));
                PushedNotification notification = pushManager.sendNotification(device, payLoad, true);
                notifications.add(notification);
            }
            else
            {
                List<Device> device = new ArrayList<Device>();
                for (String token : tokens)
                {
                    device.add(new BasicDevice(token));
                }
                notifications = pushManager.sendNotifications(payLoad, device);
            }
            List<PushedNotification> failedNotifications = PushedNotification.findFailedNotifications(notifications);
            List<PushedNotification> successfulNotifications = PushedNotification.findSuccessfulNotifications(notifications);
            int failed = failedNotifications.size();
            int successful = successfulNotifications.size();
            logger.warn("failed" + String.valueOf(failed));
            logger.warn("successful" + String.valueOf(successful));
            pushManager.stopConnection();

        }
        catch (Exception e)
        {
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }
}
